package listNodePractice.reverseListNode;

import listNodePractice.ListNode;

public class Test1 {


     public ListNode reverse(ListNode head) {
        if (head.next == null) return head;
        ListNode last = reverse(head.next);
//  CKG TODO 2023/4/19: 这时候的head 是当前遍历traverse 传进来的参数
        head.next.next = head;
        head.next = null;
        return last;
    }


    public  void   traverse(ListNode  head){
         if (head==null){
             return ;
         }
        head=head.next;
        traverse(head);
        if (head!=null){
            System.out.println(head.val);
        }

    }


    ListNode successor = null; // 后驱节点

    // 反转以 head 为起点的 n 个节点，返回新的头结点
    ListNode reverseN(ListNode head, int n) {
        if (n == 1) {
            // 记录第 n + 1 个节点
            successor = head.next;
            return head;
        }
        // 以 head.next 为起点，需要反转前 n - 1 个节点
        ListNode last = reverseN(head.next, n - 1);

        head.next.next = head;
        // 让反转之后的 head 节点和后面的节点连起来
        head.next = successor;
        return last;
    }



    public static void main(String[] args) {

        ListNode listNode1 = new ListNode(1);
        ListNode listNode2 = new ListNode(2);
        ListNode listNode3 = new ListNode(3);
        ListNode listNode4 = new ListNode(4);
        ListNode listNode5 = new ListNode(5);
        listNode1.next=listNode2;
        listNode2.next=listNode3;
        listNode3.next=listNode4;
        listNode4.next=listNode5;
        System.out.println("前序 或者后序 遍历链表");

        Test1 test1 = new Test1();
//        test1.traverse(listNode1);

        ListNode list = test1.reverse(listNode1);
        while (list!=null){
            System.out.println(list.val);
            list=list.next;
        }


    }





}
